Non-null Assertion (!!)
কটলিনে Non-null Assertion বা !! অপারেটর ব্যবহৃত হয় একটি নালেবল টাইপ ভ্যারিয়েবলের উপর নিশ্চিত করতে যে এটি নাল নয়। যদি ভ্যারিয়েবলটি নাল হয়, তবে এটি NullPointerException উত্থাপন করে। এই অপারেটরটি সেই সময় ব্যবহৃত হয় যখন আপনি জানেন যে ভ্যারিয়েবলটি নাল নয় এবং আপনি এটি নাল হিসেবে ধারণ করতে চান না।
কিভাবে কাজ করে
!! অপারেটর কটলিনের নাল সেফটি বৈশিষ্ট্যের একটি অংশ। আপনি যখন একটি নালেবল টাইপ ভ্যারিয়েবলকে !! দিয়ে কাস্ট করেন, তখন এটি ঐ ভ্যারিয়েবলের মানকে নন-নাল হিসেবে গ্রহণ করে। যদি সেই ভ্যারিয়েবলটির মান আসলে নাল হয়, তবে এটি একটি রানটাইম ত্রুটি তৈরি করবে।
ব্যবহার উদাহরণ
উদাহরণ ১: সাধারণ ব্যবহার
fun main() {
var name: String? = "Alice"
// var name: String? = null // Uncomment this line to see the exception
// Non-null assertion
println(name!!) // আউটপুট: Alice
}
ব্যাখ্যা:
- এখানে,
nameভ্যারিয়েবলটি একটি নালেবলString?টাইপ। name!!ব্যবহার করে আমরা নিশ্চিত করছি যেnameনাল নয়। যদিnameনাল হয়, তবে এটিNullPointerExceptionছুঁড়বে।
উদাহরণ ২: NullPointerException তৈরি করা
fun main() {
var name: String? = null
// Non-null assertion leading to exception
println(name!!) // আউটপুট: Exception in thread "main" java.lang.NullPointerException
}
ব্যাখ্যা:
- এখানে
nameভ্যারিয়েবলটি নাল।name!!ব্যবহার করার ফলেNullPointerExceptionহবে, কারণ আমরা নাল ভ্যালুর উপর কাজ করার চেষ্টা করছি।
কবে ব্যবহার করবেন
- বিস্তারিত সতর্কতা:
!!অপারেটর ব্যবহার করার সময় সতর্ক থাকা উচিত। কারণ এটি একটি নিশ্চিত নাল ভ্যালু ধরে নিয়ে রানটাইমে ত্রুটি তৈরি করতে পারে। তাই আপনি যখন নিশ্চিত যে ভ্যারিয়েবলটি নাল নয় তখনই এটি ব্যবহার করা উচিত। - সাধারণত এটি তখন ব্যবহার করা হয় যখন আপনি একটি লজিক্যাল পরিস্থিতিতে নিশ্চিত হন যে নাল ভ্যালু আসবে না, যেমন:
- যখন আপনি একটি API থেকে ডেটা নিয়ে আসছেন এবং জানেন যে তা কখনও নাল হবে না।
- যখন আপনি ক্লাসের কনস্ট্রাক্টরের মাধ্যমে একটি প্রোপার্টি ইনিশিয়ালাইজ করেছেন।
উপসংহার
কটলিনে Non-null Assertion (!!) অপারেটর ব্যবহার করে আপনি নালেবল ভ্যারিয়েবলের মানকে নন-নাল হিসেবে নিশ্চিত করতে পারেন, তবে এটি ব্যবহার করার সময় সতর্ক থাকতে হবে। এটি কোডের নিরাপত্তা এবং বিশ্বাসযোগ্যতা বাড়াতে সাহায্য করে, কিন্তু যদি সঠিকভাবে ব্যবহৃত না হয়, তবে এটি রানটাইম ত্রুটি সৃষ্টি করতে পারে।
Read more